package com.example.CollaborativeDiscussionLearning.service.chatRoomService;

import com.example.CollaborativeDiscussionLearning.dto.ChatUserDTO;
import com.example.CollaborativeDiscussionLearning.entity.ChatMsg;
import com.example.CollaborativeDiscussionLearning.entity.ChatRoom;
import com.example.CollaborativeDiscussionLearning.entity.ChatUser;
import com.example.CollaborativeDiscussionLearning.entity.UserRoom;
import com.example.CollaborativeDiscussionLearning.vo.ResponseDataVO;
import com.github.pagehelper.PageInfo;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
* @Description: 聊天室服務層
*/
public interface ChatRoomService {

    /**
    * 通过用户信息获取该用户拥有的由于聊天室
    * @param chatUserDTO:  用户对象
    * @return: com.example.junior.vo.ResponseDataVO
    */
    ResponseDataVO getUserInfo(ChatUserDTO chatUserDTO);

    /**
    * 添加聊天室
    * @param roomName:  聊天室名称
    * @param email:  用户邮箱
    * @return: String
    */
    ResponseDataVO insertChatRoom(String  roomName, String email,String item,String content,String contentKey);

    /**
    * 删除用户邮箱和房间id绑定
    * @param email:  用户邮箱
    * @param roomName:  roomName
    * @return: void
    */
    ResponseDataVO deleteUserRoom(String roomName, String email);

    /**
    * 上传文件
    * @param roomName:  roomName
     * @param email:  用户邮箱
     * @param file:  file
     * @param index:  前端发送的文件位置，需要再次返回前端用于定位作用
    * @exception IOException: io异常
    * @return: com.example.junior.vo.ResponseDataVO
    */
    ResponseDataVO uploadFile(String roomName, String email, MultipartFile file, Integer index) throws IOException;

    /**
    * 文件下载接口
    * @param roomName:  roomName
	* @param fileName:  文件别名
    * @return: com.example.junior.vo.ResponseDataVO
    */
    Resource downloadFile(String roomName, String fileName);

    /**
    * 根据房间名字和用户ip查询所有消息
    * @param pageIndex:  pageIndex
     * @param roomName:  roomName
     * @param email:  用户邮箱
    * @return: com.github.pagehelper.PageInfo<com.example.junior.entity.ChatMsg>
    */
    PageInfo<ChatMsg> queryMsg(Integer pageIndex, String roomName, String email);

    List<ChatMsg> queryAnswer(String roomName);

    /**
     * 根据聊天室名字查找聊天室信息   1.0 小组分析-讨论室基本信息
     * */
    ChatRoom queryRoomByRoomName(String roomName);

    /**
     * 根据聊天室名字查找聊天室信息   1.0 小组分析-讨论室基本信息
     * */
    ChatRoom queryRoomByRoomNameAndCourseId(String roomName,Integer courseId);

    /**
     * 根据讨论室id获取该讨论室所有成员信息  1.1 小组分析-讨论室成员组成
     * */
    public List<ChatUser> selectByRoomIdForUsers(Integer roomId);

    /**
     * 根据讨论室id获取该讨论室所有信息  1.2 小组分析-讨论室所有信息
     * */
    public List<ChatMsg> queryAllMsg(Integer roomId);


    /**
     * 根据用户id和房间名字查询该用户发的所有信息数量 2.0 个人分析-个人发送信息总数
     * */
    List<ChatMsg> coutMsgByUserId(String roomName,String email);

    ChatUser queryUser(ChatUser chatUser);

    ChatUser queryUserByCode(String  code);

    Integer deleteUser(ChatUser chatUser);
    /***
     * 修改用户密码
     * */
    Integer revisePassWord(String email,String newPassage);
    /**
     * 根据用户code和房间号查询
     */
    UserRoom queryUserRoom(String code, Integer roomId);

    /**
     * 插入用户ip和房间id对应表
     * @param userRoom:  roomId
     * @return: void
     */
    void insertUserRoom(UserRoom userRoom);

}
